// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()
const _ = db.command
const ordersCollection = db.collection('orders')

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  
  try {
    // 获取用户ID，优先使用openid，如果没有则使用guestId
    const userId = wxContext.OPENID || event.userId
    
    if (!userId) {
      return {
        success: false,
        errMsg: '用户ID不存在'
      }
    }
    
    // 根据action参数执行不同操作
    const { action = 'getOrders' } = event
    
    // 获取订单数量
    if (action === 'getOrderCount') {
      const countResult = await ordersCollection.where({
        userId: userId
      }).count()
      
      return {
        success: true,
        data: countResult.total
      }
    }
    
    // 查询用户的所有订单
    const MAX_LIMIT = 100 // 最大查询数量
    const countResult = await ordersCollection.where({
      userId: userId
    }).count()
    
    const total = countResult.total
    
    // 计算需要分几次取
    const batchTimes = Math.ceil(total / MAX_LIMIT)
    
    // 承载所有读操作的 promise 的数组
    const tasks = []
    
    for (let i = 0; i < batchTimes; i++) {
      const promise = ordersCollection.where({
        userId: userId
      })
      .skip(i * MAX_LIMIT)
      .limit(MAX_LIMIT)
      .orderBy('createTime', 'desc')
      .get()
      
      tasks.push(promise)
    }
    
    // 等待所有
    const results = await Promise.all(tasks)
    
    // 合并查询结果
    let orders = []
    results.forEach(result => {
      orders = orders.concat(result.data)
    })
    
    return {
      success: true,
      data: orders
    }
  } catch (err) {
    console.error('获取订单列表失败:', err)
    return {
      success: false,
      errMsg: '获取订单列表失败',
      error: err
    }
  }
}